



Static blocks in Java


Unlike C++, Java supports a special block, called static block (also called static clause) which can be used for static initializations of a class. This code inside static block is executed only once: the first time you make an object of that class or the first time you access a static member of that class (even if you never make an object of that class). For example, check output of following Java program.







 


 

 













// filename: Main.java 
class Test { 
    static int i; 
    int j; 
      
    // start of static block  
    static { 
        i = 10; 
        System.out.println("static block called "); 
    } 
    // end of static block  
} 
  
class Main { 
    public static void main(String args[]) { 
  
        // Although we don't have an object of Test, static block is  
        // called because i is being accessed in following statement. 
        System.out.println(Test.i);  
    } 
} 


















Output:
static block called
10

Also, static blocks are executed before constructors. For example, check output of following Java program.







 


 

 













// filename: Main.java 
class Test { 
    static int i; 
    int j; 
    static { 
        i = 10; 
        System.out.println("static block called "); 
    } 
    Test(){ 
        System.out.println("Constructor called"); 
    } 
} 
  
class Main { 
    public static void main(String args[]) { 
  
       // Although we have two objects, static block is executed only once. 
       Test t1 = new Test(); 
       Test t2 = new Test(); 
    } 
} 


















Output:
static block called
Constructor called
Constructor called

What if we want to execute some code for every object?
We use Initializer Block in Java
References:
Thinking in Java Book
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.













 


 

 
Most popular in Java
 






 
More related articles in Java
 



 


 













